---
id: facebook-messenger
sidebar_label: Facebook Messenger
title: Facebook Messenger
description: Build a Rasa Chat Bot on Facebook Messenger
---

## Facebook Setup

You first need to set up a facebook page and app to get credentials to connect to
Facebook Messenger. Once you have them you can add these to your `credentials.yml`.

### Getting Credentials

**How to get the Facebook credentials:**
You need to set up a Facebook app and a page.

1. To create the app head over to
   [Facebook for Developers](https://developers.facebook.com/)
   and click on **My Apps** → **Add New App**.

2. Go onto the dashboard for the app and under **Products**,
   find the **Messenger** section and click **Set Up**. Scroll down to
   **Token Generation** and click on the link to create a new page for your
   app.

3. Create your page and select it in the dropdown menu for the
   **Token Generation**. The shown **Page Access Token** is the
   `page-access-token` needed later on.

4. Locate the **App Secret** in the app dashboard under **Settings** → **Basic**.
   This will be your `secret`.

5. Use the collected `secret` and `page-access-token` in your
   `credentials.yml`, and add a field called `verify` containing
   a string of your choice. Start `rasa run` with the
   `--credentials credentials.yml` option.

6. Set up a **Webhook** and select at least the **messaging** and
   **messaging_postback** subscriptions. Insert your callback URL, which will
   look like `https://<host>:<port>/webhooks/facebook/webhook`, replacing
   the host and port with the appropriate values from your running Rasa server.
   
   Insert the **Verify Token** which has to match the `verify`
   entry in your `credentials.yml`.

:::note configure https
Facebook Messenger only forwards
messages to endpoints via `https`, so take appropriate measures to add
it to your setup. For local testing of your bot, see [Testing Channels on Your Local Machine](../messaging-and-voice-channels.mdx#testing-channels-on-your-local-machine).
:::

For more detailed steps, visit the
[Messenger docs](https://developers.facebook.com/docs/graph-api/webhooks).

### Running On Facebook Messenger

Add the Facebook credentials to your `credentials.yml`:

```yaml-rasa
facebook:
  verify: "rasa-bot"
  secret: "3e34709d01ea89032asdebfe5a74518"
  page-access-token: "EAAbHPa7H9rEBAAuFk4Q3gPKbDedQnx4djJJ1JmQ7CAqO4iJKrQcNT0wtD"
```


Restart your Rasa server
to make the new channel endpoint available for Facebook Messenger to send messages to.


## Supported response attachments

In addition to typical text, image, and custom responses, the Facebook Messenger
channel supports the following additional response attachments:

* [Buttons](https://developers.facebook.com/docs/messenger-platform/send-messages/buttons)
  are structured the same as other Rasa buttons. Facebook API limits the amount of
  buttons you can sent in a message to 3. If more than 3 buttons are provided in a
  message, Rasa will ignore all provided buttons.

* [Quick Replies](https://developers.facebook.com/docs/messenger-platform/send-messages/quick-replies)
  provide a way to present a set of up to 13 buttons in-conversation that contain a
  title and optional image, and appear prominently above the composer. You can also
  use quick replies to request a person's email address or phone number.

  ```yaml-rasa
  utter_fb_quick_reply_example:
     - text: Hello World!
       quick_replies:
         - title: Text quick reply
           payload: /example_intent
         - title: Image quick reply
           payload: /example_intent
           image_url: http://example.com/img/red.png
         # below are Facebook provided quick replies
         # the title and payload will be filled
         # with the user's information from their profile
         - content_type: user_email
           title:
           payload:
         - content_type: user_phone_number
           title:
           payload:
  ```

:::note
Both Quick Reply and Button titles in Facebook Messenger have a character limit of
20. Titles longer than 20 characters will be truncated.

:::

* [Elements](https://developers.facebook.com/docs/messenger-platform/send-messages/template/generic)
  provide a way to create a horizontally scrollable list up to 10 content elements that
  integrate buttons, images, and more alongside text a single message.

  ```yaml-rasa
  utter_fb_element_example:
     - text: Hello World!
       elements:
         - title: Element Title 1
           subtitle: Subtitles are supported
           buttons: # note the button limit still applies here
             - title: Example button A
               payload: /example_intent
             - title: Example button B
               payload: /example_intent
             - title: Example button C
               payload: /example_intent
         - title: Element Title 2
           image_url: http://example.com/img/red.png
           buttons:
             - title: Example button D
               payload: /example_intent
             - title: Example button E
               payload: /example_intent
             - title: Example button F
               payload: /example_intent
  ```
